package cnn.config;

import cnn.sys.RestSession;
import cnn.sys.RestSessionHandler;
import cnn.topfox.common.DataDTO;
import cnn.topfox.common.FillDataHandler;
import cnn.topfox.data.DbState;
import cnn.topfox.data.Field;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * DTO实体对象注解要填充的字段
 */
@Component
public class FillDataHandlerConfig implements FillDataHandler {
    @Autowired
    RestSessionHandler restSessionHandler;

    /**
     * 新增和更新的填充
     * @param fillFields 新增或者更新填充的字段
     * @param list 新增或者更新的数据
     */
    @Override
    public void fillData(Map<String, Field> fillFields, List<DataDTO> list) {
        RestSession restSession=restSessionHandler.get();
        list.forEach((dto)->{
            String state = dto.dataState();
            fillFields.forEach((fieldName,field)->{
                //新增时这两个字段都要赋值
                if (DbState.INSERT.equals(state) && (field.isFillUpdate() ||field.isFillInsert())){
                    switch (fieldName){
                        case "createUser":
                        case "updateUser":
                            dto.setValue(fieldName,restSession.getUserName());
                    }
                }

                //更新时只对一个字段赋值
                if (DbState.UPDATE.equals(state) && field.isFillUpdate()){
                    switch (fieldName){
                        case "updateUser":
                            dto.setValue(fieldName,restSession.getUserName());
                            break;
                    }
                }
            });
        });
    }

    @Override
    public Set<String> getInsertFillFields() {
        return null;
    }

    @Override
    public Set<String> getUpdateFillFields() {
        return null;
    }
}